﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Web.Security;
using ProjetoClasse.Model.Dao;
using Juntae.Util;
using System.Net;
using ProjetoClasse.Model.Entidade;
using System.Web.Services;
using System.Web.Script.Services;
using Classes.Model.Dao;
using Classes.Model.Entidade;
using System.Text;

namespace Juntae.Users
{
    public partial class ViewUser : System.Web.UI.Page
    {
        private List<ComentarioEventoDTO> listaComentarios = null;
        private EventoDAO eventoDAO = new EventoDAO();
        private UsuarioPessoaDAO usuarioPessoaDAO = new UsuarioPessoaDAO();
        private UsuarioPessoaDTO usuarioPessoaDTO = null;
        private List<EventoDTO> listaEventos = null;
        private string inserirComentarioCLIENTID;
        private string inserirComentarioUNIQUEID;
        private string idUsuario;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                idUsuario = Request.QueryString["profile"];
                if (idUsuario != null && !idUsuario.Trim().Equals(""))
                {
                    inserirComentarioCLIENTID = txtInserirComentario.ClientID;
                    inserirComentarioUNIQUEID = txtInserirComentario.UniqueID;
                    ViewState["inserirComentarioCLIENTID"] = inserirComentarioCLIENTID;
                    ViewState["inserirComentarioUNIQUEID"] = inserirComentarioUNIQUEID;
                    LoadPerfil(idUsuario);
                    LoadEuVou();
                    LoadEventos();
                    if (ViewState["ultimoEvento"] != null)
                    {
                        txtInserirComentario.Attributes.Add("onKeyPress", "InserirComentario('" + ((EventoDTO)ViewState["ultimoEvento"]).id + "')");
                    }
                }
                else
                {
                    Response.Redirect("Default.aspx");
                }
            }
        }

        private void LoadPerfil(String idUsuario)
        {
            try
            {
                usuarioPessoaDTO = usuarioPessoaDAO.ObterPerfil(idUsuario);
            }
            catch (Exception)
            {
                Response.Redirect("Default.aspx");
            }
            if (usuarioPessoaDTO != null)
            {
                #region Foto Perfil
                Uri urlCheck = new Uri(@"http://" + HttpContext.Current.Request.Url.Authority + "/img/Users_Avatar/" + usuarioPessoaDTO.id_membership + ".jpg");
                WebRequest request = WebRequest.Create(urlCheck);
                request.Timeout = 15000;

                try
                {
                    WebResponse response = request.GetResponse();
                    foto_perfil.ImageUrl = ("~/img/Users_Avatar/") + usuarioPessoaDTO.id_membership + ".jpg";
                    foto_perfil.Width = new Unit("117px");
                    foto_perfil.Height = new Unit("117px");
                    updatePanelFoto.Update();
                }
                catch (Exception) { }

                #endregion Foto Perfil

                #region Perfil(Nome, Sobrenome, Mensagem Status)

                #endregion Perfil

                #region Atribuicao aos componentes

                lblNome.Text = usuarioPessoaDTO.nome;
                nm_usuario_evento.Text = usuarioPessoaDTO.nome;
                nm_usuario_evento.NavigateUrl = "Default.aspx";
                txtMsgPerfil.Text = usuarioPessoaDTO.msg_perfil;

                if (Session["perfil"] != null)
                {
                    bool existeConvite = usuarioPessoaDAO.VerificarExistenciaConvite(((UsuarioPessoaDTO)Session["perfil"]).id, usuarioPessoaDTO.id);
                    if (!existeConvite)
                    {
                        btnAddAmigo.Visible = true;
                    }
                    else
                    {
                        bool conviteAprovado = usuarioPessoaDAO.ObterStatusConvite(((UsuarioPessoaDTO)Session["perfil"]).id, usuarioPessoaDTO.id);
                        if (conviteAprovado)
                        {
                            btnAddAmigo.Visible = false;
                            img_wait.Visible = false;
                        }
                        else
                        {
                            btnAddAmigo.Visible = false;
                            img_wait.Visible = true;
                        }
                    }
                }
                #endregion Atribuicao aos componentes
            }
        }

        private void LoadEuVou()
        {
            #region Eu Vou!

            StringBuilder sb = new StringBuilder();
            sb.Append("<img src=\"../../img/img_euvou.png\" alt=\"Eu Vou!\" class=\"img_euvou\" /><br />");
            listaEventos = eventoDAO.ObterEventosByUser(Convert.ToString(new UsuarioPessoaDAO().ObterIdUsuario(idUsuario)));
            if (usuarioPessoaDTO != null)
            {
                usuarioPessoaDTO.listaEventos = listaEventos;
            }
            if (listaEventos != null && listaEventos.Count > 0)
            {
                foreach (EventoDTO e in listaEventos)
                {
                    sb.Append("<img style = 'height:64px;width:64px;cursor:pointer;margin-left:20px;margin-top:10px;' src=\"" + "/../img/Eventos/" + e.Logomarca + "\" alt=\"Image\" />");
                }
            }
            euvou.InnerHtml = sb.ToString();

            #endregion Eu Vou!

        }

        private void LoadEventos()
        {
            #region Evento

            if (usuarioPessoaDTO != null && usuarioPessoaDTO.listaEventos.Count() > 0)
            {
                EventoDTO evento = usuarioPessoaDTO.listaEventos.Last();
                ViewState["ultimoEvento"] = evento;
                icon_evento.ImageUrl = "/../img/Eventos/" + evento.Logomarca;
                lbl_vai_participar.Text = "vai participar do ";
                nm_evento.Text = evento.Nome;

                #region Comentários

                if (usuarioPessoaDTO != null)
                {
                    listaComentarios = usuarioPessoaDAO.ObterComentariosPorEvento(usuarioPessoaDTO.id, evento.id);
                    usuarioPessoaDTO.listaComentarios = listaComentarios;
                }
            }
            else
            {
                lbl_vai_participar.Text = "ainda não participa de nenhum evento.";
                icon_evento.ImageUrl = "/../img/icon_evento.png";
                box_recado_evento.Visible = false;
            }
            if (listaComentarios != null && listaComentarios.Count > 0)
            {
                if (listaComentarios.Count > 1)
                {
                    lnk_visualizar_comentarios.Text = "Visualizar todos os " + listaComentarios.Count + " comentários";
                }

                var coment = listaComentarios.Take(1);
                foreach (var v in coment)
                {
                    foto_comentario.ImageUrl = "/../img/Users_Avatar/" + usuarioPessoaDAO.ObterMembershipIdByIdUsuario(v.id_usuario_comentou) + ".jpg";
                    lnkUserComment.Text = usuarioPessoaDAO.ObterNomeUsuarioById(v.id_usuario_comentou);
                    lblComentario.Text = v.comentario;
                    btnTrash.Attributes.Add("onclick", "deleteComment('" + v.id_comentario + "')");
                }
            }
            else
            {
                lnk_visualizar_comentarios.Visible = false;
                box_recado_evento.Attributes.Add("style", "visibility:hidden;");
                box_inserir_recado_evento.Attributes.Add("style", "visibility:hidden;");
            }

            img_user_logged.ImageUrl = "/../img/Users_Avatar/" + Membership.GetUser(true).ProviderUserKey + ".jpg";

                #endregion Comentários

            #endregion Evento
        }

        protected void btnEnviarMsgPerfil_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                new UsuarioPessoaDAO().UpdateMsgPerfil(Membership.GetUser(true).ProviderUserKey.ToString(), txtMsgPerfil.Text);
            }
            catch (Exception)
            {
                Response.Write("Uia!! Barriou!");
            }
        }


        [WebMethodAttribute(), ScriptMethodAttribute()]
        public static List<string> PesquisarUsuario(string prefixText, int count, string contextKey)
        {
            List<UsuarioPessoaDTO> listaUsuario = new UsuarioPessoaDAO().PesquisarUsuario(prefixText);
            List<string> listaUsuarioRetorno = new List<string>();

            foreach (UsuarioPessoaDTO usuarios in listaUsuario)
            {
                listaUsuarioRetorno.Add(AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(string.Format("{0}{1}", usuarios.nome, " " + usuarios.sobrenome), usuarios.id_membership));
            }
            return listaUsuarioRetorno;
        }

        protected void lnk_visualizar_comentarios_Click(object sender, EventArgs e)
        {
            ExibirComentarios();
        }

        [WebMethod]
        public static void InserirComentario(string idEvento, string comentario, string idMembership)
        {
            UsuarioPessoaDAO usuarioPessoaDAO = new UsuarioPessoaDAO();
            try
            {
                new EventoDAO().InserirComentarioEvento(idEvento, comentario, new UsuarioPessoaDAO().ObterIdUsuario(idMembership), usuarioPessoaDAO.ObterIdUsuario(Membership.GetUser(true)));
            }
            catch (Exception)
            {
                return;
            }
        }

        [WebMethod]
        public static void DeletarComentario(string idComentario)
        {
            EventoDAO eventoDAO = new EventoDAO();
            try
            {
                eventoDAO.DeletarComentario(idComentario);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        protected void btnUpdateComentario_Click(object sender, EventArgs e)
        {
            AtualizarPainelComentarios(sender, e);
            UpdatePanelEvento1.Update();
        }

        protected void btnDeleteComentario_Click(object sender, EventArgs e)
        {
            AtualizarPainelComentarios(sender, e);
        }

        private void ExibirComentarios()
        {
            usuarioPessoaDTO = new UsuarioPessoaDAO().ObterPerfil(Request.QueryString["profile"]);
            usuarioPessoaDTO.listaEventos = new EventoDAO().ObterEventosByUser(usuarioPessoaDTO.id);
            LoadEventos();
            StringBuilder sb = new StringBuilder();
            listaComentarios = usuarioPessoaDTO.listaComentarios;
            listaEventos = usuarioPessoaDTO.listaEventos;

            if (listaEventos != null)
            {
                EventoDTO evento = listaEventos.Last();
                sb.Append("<img src=\"/../img/Eventos/" + evento.Logomarca + "\" class=\"icon_evento1\" Height=\"48px\" Width=\"48px\" /><p class=\"titulo_evento1\"><a href=\"#\">" + usuarioPessoaDTO.nome + "</a>, vai participar do <a href=\"#\">" + evento.Nome + "</a><br /></p><span>");
                foreach (ComentarioEventoDTO comment in listaComentarios)
                {
                    if (comment.id_evento == evento.id)
                    {
                        sb.Append("<div id=\"box_recado_evento\" class=\"box_recado_evento\"><img src=\"/../img/Users_Avatar/" + usuarioPessoaDAO.ObterMembershipIdByIdUsuario(comment.id_usuario_comentou) + ".jpg\" class=\"foto_recado\" Height=\"50px\" Width=\"50px\"/><a href=\"ViewUser.aspx?profile="+ usuarioPessoaDAO.ObterMembershipIdByIdUsuario(comment.id_usuario_comentou) +"\" class=\"lnkUserComment\" Width=\"200px\" style='position:relative;left:17px;'>" + usuarioPessoaDAO.ObterNomeUsuarioById(comment.id_usuario_comentou) + "</a><br /><div id=\"comment\">" + comment.comentario + "</div><a href=\"#\" onclick=\"deleteComment('" + comment.id_comentario + "'); return false;\"><img src=\"/../img/trash_icon.png\" style = 'position:relative;top:25px;float:right;right:19px;' class=\"trash_evento\"/></a><br /></div>");
                    }
                }
                sb.Append("<div id=\"box_inserir_recado_evento\" class=\"box_inserir_recado_evento\"> <img src=\"../../img/Users_Avatar/" + Membership.GetUser(true).ProviderUserKey + ".jpg\" class=\"foto_recado_inserir_recado_evento\" alt=\"Foto\" width=\"50px\" height=\"50px\"/> <input id=\"" + ViewState["inserirComentarioCLIENTID"].ToString() + "\" name=\"" + ViewState["inserirComentarioUNIQUEID"].ToString() + "\"type=\"text\" class=\"input_recado_evento\" value=\"Digite seu comentário e pressione Enter para enviá-lo\" onfocus=\"limparTxt(this);\" onblur=\"defaultValueTxt(this);\" onkeypress=\"InserirComentario('" + evento.id + "');\"/></div><p>&nbsp</p><p>&nbsp</p>");
                evento1.InnerHtml = sb.ToString() + "<br />";
                UpdatePanelEvento1.Update();
            }
        }

        private void AtualizarPainelComentarios(object sender, EventArgs e)
        {
            UpdatePanelEvento1.Update();
            lnk_visualizar_comentarios_Click(sender, e);
        }

        protected void btnAddAmigo_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                if (Session["perfil"] != null)
                {
                    usuarioPessoaDTO = usuarioPessoaDAO.ObterPerfil(Request.QueryString["profile"]);
                    usuarioPessoaDAO.EnviarConviteAmizade(((UsuarioPessoaDTO)Session["perfil"]).id, usuarioPessoaDTO.id);
                    btnAddAmigo.Visible = false;
                    img_wait.Visible = true;
                    updatePanelAddAmigo.Update();
                }
            }
            catch (Exception ex)
            {
                if (!ClientScript.IsClientScriptBlockRegistered("falha_convite_amizade"))
                {
                    ClientScript.RegisterClientScriptBlock(this.GetType(), "falha_convite_amizade", ScriptUtil.MsgCustom("Erro ao enviar convite. " + ex.Message));
                }
                return;
            }
        }
    }
}